package com.java.base.exercise.jvm;

/**
 * @Author RenPu
 * @Date 2021/11/15 10:06
 * @Version 1.0
 * @Description:
 *
 * -XX:NewSize=10485760        //新生代初始值
 * -XX:MaxNewSize=10485760     //新生代最大值
 * -XX:InitialHeapSize=20971520  //初始化堆大小
 * -XX:MaxHeapSize=20971520      //堆最大值
 * -XX:SurvivorRatio=8           //Eden：Suriv1:Suriv2  8:1:1
 * -XX:MaxTenuringThreshold=15   //设置对象年龄阈值，超过此阈值则直接进入老年代
 * -XX:PretenureSizeThreshold=3145728    //设置大对象的阈值，当到达阈值为3M的对象直接为大对象，则直接进入老年代
 * -XX:+UseParNewGC                //指定使用ParNew(并发垃圾回收，复制算法)
 * -XX:+UseConcMarkSweepGC         //指定使用CMS(并发垃圾回收，标记清除，空间压缩整理避免空间碎片化的缺点)
 * -XX:+PrintGCDetails             //打印GC详细日志
 * -XX:+PrintGCTimeStamps          //打印GC触发时间
 * -Xloggc:gc.log                  //打印GC日志输出到本地磁盘
 * -XX:+CMSParallelInitialMarkEnabled 这个参数会在CMS垃圾回收器的“初始标记”阶段开启多线程并发执行
 * -XX:+CMSScavengeBeforeRemark  这个参数会在CMS的重新标记阶段之前，先尽量执行一次Young GC
 * 重新标记和初始标记都是会产生Stop the World的，提前执行YoungGC 就会回收掉一些年轻代的垃圾对象，可以避免CMS重新标记的性能减少他的损耗
 *  因为一般中大型公司都是接入类似Zabbix、OpenFalcon或者公司自研的一些监控系统的，监控系统一般都做的很好，可以让你的系统
 * 直接接入进去，然后在上面可以看到每台机器的CPU、磁盘、内存、网络的一些负载。
 * “-XX:TraceClassLoading -XX:TraceClassUnloading”  这两个参数，顾名思义，就是追踪类加载和类卸载的情况，
 * -XX:SoftRefLRUPolicyMSPerMB=0 这个参数设置大一些即可，千万别让一些新手同学设置为0，可以设置个1000，2000，3000，或者5000毫秒，都可以。
 * -XX:+DisableExplicitGC。这个参数的意思就是禁止显式执行GC
 *
 **/
public class FullGCDemo {

    public static void main(String[] args) {
        byte[] array1 = new byte[4 * 1024 * 1024];
        array1=null;

        byte[] array2 = new byte[2 * 1024 * 1024];
        byte[] array3 = new byte[2 * 1024 * 1024];
        byte[] array4 = new byte[2 * 1024 * 1024];


        byte[] array5 = new byte[128 * 1024];


        byte[] array6 = new byte[2 * 1024 * 1024];
    }


}
